/**
在 TypeScript 中，函数的类型说明用于定义函数的参数类型和返回值类型，以确保函数的使用符合预期的类型。这种类型检查可以帮助开发者在编写代码时捕获潜在的错误，提升代码的可维护性。
  1. 函数类型的基本语法

  在 TypeScript 中，函数的类型可以通过以下方式定义：
  function 函数名(参数名: 参数类型): 返回值类型 {
      // 函数体
  }
  2. 示例

   2.1 基本函数类型
  function add(a: number, b: number): number {
      return a + b;
  }

  const result = add(2, 3); // 合法
   2.2 可选参数
  可以使用  `?`  来定义可选参数，表示该参数可以被省略：
  function greet(name: string, greeting?: string): string {
      return greeting ? `${greeting}, ${name}!` : `Hello, ${name}!`;
  }

  console.log(greet("Alice"));          // 输出: Hello, Alice!
  console.log(greet("Bob", "Hi"));      // 输出: Hi, Bob!
   2.3 默认参数

  可以为参数指定默认值，如果调用时没有提供该参数，则会使用默认值：
  function multiply(a: number, b: number = 1): number {
      return a * b;
  }

  console.log(multiply(5));     // 输出: 5
  console.log(multiply(5, 2));  // 输出: 10
   2.4 函数重载
  TypeScript 支持函数重载，可以为同一个函数定义多个签名：
  function combine(input1: string, input2: string): string;
  function combine(input1: number, input2: number): number;
  function combine(input1: any, input2: any): any {
      return input1 + input2;
  }

  console.log(combine("Hello, ", "World!")); // 输出: Hello, World!
  console.log(combine(1, 2));                  // 输出: 3
  3. 函数类型变量

  可以将函数赋值给变量，并定义该变量的类型：
  let myFunction: (x: number, y: number) => number;

  myFunction = function (x: number, y: number): number {
      return x + y;
  };

  console.log(myFunction(2, 3)); // 输出: 5
  4. 结论

  函数的类型说明是 TypeScript 中非常重要的特性，它可以帮助开发者明确函数的参数和返回值类型，从而提高代码的安全性和可读性。通过使用基本函数类型、可选参数、默认参数、函数重载等功能，开发者可以更灵活地定义和使用函数。合理使用函数类型说明，可以显著提升代码的质量和可维护性。
 */

function foo(arg: number): number {
  return 123
}

// foo本身也是一个标识符, 也应该有自己的类型
const bar: any = (arg: number): number => {
  return 123
}

type fnType = () => number

// 1. 函数声明
function delayExecFn(fn: fnType) {
  setTimeout(fn, 1000)
}

export {}